A service-oriented architecture (SOA) provides resources for performing particular functions as independent services that are accessible in a standardized way over a network. The services are considered standardized because distributed program components can invoke the services without any knowledge of an underlying platform that supports the services. Communication and coordination of services with one another allows the services to perform activities for entities that are tenants of the SOA.
When an application exposes a service to a client computer, a host server performs the service for the client computer. In a typical SOA, each host server in a server fleet exposes its Internet protocol (IP) address to the client computer through a domain name system (DNS) record. Using the DNS record, the client computer selects one of the host servers in the server fleet. For example, the client computer may select one of the available host servers by making a random selection or by using a round robin technique.
Having the client select one of the host servers in the fleet presents several disadvantages. First, the client might transmit a request to a host server that is already processing a large quantity of requests and, as a result, the host server may experience processing delays or even fail due to receiving a large amount of traffic at one time. Second, to enable the client to select the host server, it is necessary to manage a DNS record that identifies available host servers and populate the DNS record with correct network addresses of the host servers. Third, it is necessary to monitor the host servers and update the network addresses that are stored in the DNS record when a host server fails. These maintenance and monitoring tasks consume resources and time.
To mitigate some of the problems outlined above, hardware load balancers may be used on the client side to balance requests across the host servers. Hardware load balancers distribute work between two or more computers or other resources to optimize resource use, throughput, or response time. Although using hardware load balancers on the client side may balance requests across host servers, hardware load balancers present other drawbacks. For example, a hardware load balancer represents a single point of potential failure for all of the clients that use it to route requests. To address this problem, in addition to an active hardware load balancer, it may be necessary to have one or more backup hardware load balancers. Furthermore, a hardware load balancer is a concentration point for network traffic and the hardware load balancer might reach its maximum capacity. For example, the bandwidth of a single hardware load balancer is approximately 80,000 requests per second. It may be necessary to have a fleet of hardware load balancers to handle requests, which is both costly and requires time consuming maintenance.
As is evident from the above, having a client select a host server using typical selection techniques does not provide any form of load balancing across a server fleet and, accordingly, clients may burden the same host server with many requests. Furthermore, hardware load balancers are disadvantageous due to cost, capacity limitations, and maintenance requirements. Therefore, there is a need for improved systems and methods that overcome the problems outlined above.